package com.open.base.strategy;


import com.open.base.model.BaseUserConfig;
import com.open.base.model.CodeGenerate;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 用户配置策略工厂
 * 遵循DDD原则，通过Spring管理实体策略实例
 *
 * @author 大树03
 * @date 2025-09-10
 */
@Component
public class UserConfigStrategyFactory {

    private final Map<String, BaseUserConfig> strategyMap;

    public UserConfigStrategyFactory(List<BaseUserConfig> strategies) {
        // 将所有策略实现按配置类型进行映射
        this.strategyMap = strategies.stream()
                .collect(Collectors.toMap(
                        BaseUserConfig::getConfigType,
                        Function.identity()
                ));
    }

    /**
     * 根据配置类型获取对应的策略
     * @param configType 配置类型
     * @return 对应的策略实现，如果未找到则返回默认策略
     */
    public BaseUserConfig getStrategy(String configType) {
        return strategyMap.getOrDefault(configType, getDefaultStrategy());
    }

    /**
     * 获取默认策略
     * @return 默认策略实例
     */
    private BaseUserConfig getDefaultStrategy() {
        return new CodeGenerate();
    }
}